package com.zpark.harmonyos_gmd_17.slice;

import com.zpark.harmonyos_gmd_17.ResourceTable;
import com.zpark.harmonyos_gmd_17.slider.TabPageSliderProvider;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.*;

import java.util.ArrayList;
import java.util.List;

public class MainAbilitySlice extends AbilitySlice implements Component.FocusChangedListener {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);

        // 初始化TabList
        TabList tabList = (TabList) findComponentById(ResourceTable.Id_tab_list);
        // 定义导航内容
        String tabListNavgs[] = {"首页", "分类", "购物车", "我的"};
        // 循环取出导航内容创建tab对象，然后添加到TabList当中
        for (String tabListNavg : tabListNavgs) {
            // 创建tab对象
            TabList.Tab tab = tabList.new Tab(this);
            tab.setText(tabListNavg);
            // 将tab对象添加到tabList当中
            tabList.addTab(tab);
        }

        // 渲染PageSlider（初始化PageSlider）
        // 定义list存放页面id
        List<Integer> ids = new ArrayList<>();
        ids.add(ResourceTable.Layout_ability_main_index);
        ids.add(ResourceTable.Layout_ability_main_category);
        ids.add(ResourceTable.Layout_ability_main_shopcart);
        ids.add(ResourceTable.Layout_ability_main_user_conter);

        // 获取PageSlider
        PageSlider pageSlider = (PageSlider) findComponentById(ResourceTable.Id_page_slider);
        // 设置为当前页面提供视图的分页适配器。
        pageSlider.setProvider(new TabPageSliderProvider(ids, this));

        // 默认选中首页
        tabList.selectTabAt(0);

        // TabList与PageSlider联动
        tabList.addTabSelectedListener(new TabList.TabSelectedListener() {
            @Override
            public void onSelected(TabList.Tab tab) {
                // 获取点击的菜单索引
                int index = tab.getPosition();
                // 设置pageSlider的索引与菜单索引一致
                pageSlider.setCurrentPage(index);

                switch (index) {
                    case 0:
                        // 首页
                        initIndex(pageSlider);
                        break;
                    case 1:
                        // 分类
                        initCategory(pageSlider);
                        break;
                    case 2:
                        // 购物车
                        initShopcart(pageSlider);
                        break;
                    case 3:
                        // 我的
                        initUserCenter(pageSlider);
                        break;
                    default:
                        break;
                }

            }

            @Override
            public void onUnselected(TabList.Tab tab) { }

            @Override
            public void onReselected(TabList.Tab tab) { }
        });

        // PageSlider与TabList联动
        pageSlider.addPageChangedListener(new PageSlider.PageChangedListener() {
            // 当页面滑动时调用。
            @Override
            public void onPageSliding(int i, float v, int i1) { }

            // 当页面幻灯片状态改变时调用。
            @Override
            public void onPageSlideStateChanged(int i) { }

            /*
                在选择新页面时回调。
                参数说明:itemPos -所选页面的索引。
             */
            @Override
            public void onPageChosen(int i) {
                // 该方法的参数i表示pageSlider的索引
                if (tabList.getSelectedTabIndex() != i) {
                    // 将当前pageSlider的索引设置为TabList的索引
                    tabList.selectTabAt(i);
                }
            }
        });

    }

    // 初始化用户界面
    private void initUserCenter(PageSlider pageSlider) {
        // 给登录按钮添点击事件，跳转到登录页面
        // 获取按钮对象
        Button btn = (Button) findComponentById(ResourceTable.Id_btn_login);
        // 添加点击事件
        btn.setClickedListener(component -> {
            // 实现页面跳转
            present(new LoginAbilitySlice(), new Intent());
        });
    }

    // 初始化购物车页面
    private void initShopcart(PageSlider pageSlider) {
        /*
            添加按钮点击跳转功能
            1、获取按钮对象
            2、添加点击事件
            3、实现页面跳转
         */
        Button btn = (Button) findComponentById(ResourceTable.Id_shopcart_add_button);
        btn.setClickedListener(component -> {
            Intent intent = new Intent();
            present(new OrderAddAbilitySlice(), intent);
        });
    }

    // 初始化分类页面
    private void initCategory(PageSlider pageSlider) {
        // 获取首页搜索框组件
        TextField indexSearch = (TextField) findComponentById(ResourceTable.Id_category_search_textfield);
        // 添加搜索框获取焦点事件
        indexSearch.setFocusChangedListener(this::onFocusChange);
    }

    // 初始化index页面
    private void initIndex(PageSlider pageSlider) {
        // 获取首页搜索框组件
        TextField indexSearch = (TextField) findComponentById(ResourceTable.Id_search_index_textfield);
        // 添加搜索框获取焦点事件
        indexSearch.setFocusChangedListener(this::onFocusChange);

        // 获取布局组件
        DirectionalLayout dirLayout = (DirectionalLayout) findComponentById(ResourceTable.Id_product_detail_1);
        // 添加点击事件
        dirLayout.setClickedListener(component -> {
            // 设置绑定参数
            Intent intent = new Intent();
            intent.setParam("productID", "9527");
            // 跳转商品详情页面
            this.present(new DetailAbilitySlice(), intent);
        });
    }

    @Override
    public void onFocusChange(Component component, boolean b) {
        // 跳转到商品搜索页面
        // 判断用户是否点击搜索框（搜索框获取焦点）
        if (b) {
            // 获取到了焦点，跳转到商品收索页面SearchAbilitySlice.java
            present(new SearchAbilitySlice(), new Intent());
        }
    }
}
